package com.dylon.sort;

import java.util.Arrays;

/**
 * 冒泡排序
 */
public class BubbleSort {

    public static void main(String[] args) {
        int[] a = new int[]{2,5,3,1,4};
        System.out.println(Arrays.toString(a));
        sort(a);
        System.out.println(Arrays.toString(a));
    }


    public static void sort(int[] arr) {
        for (int i = arr.length-1; i >=0 ; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j+1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }

    /*
    冒泡排序是一种稳定排序算法，时间复杂度为O(n^2)
    循环遍历多次每次从前往后把大元素往后调，每次确定一个最大(最小)元素，多次后达到排序序列。(或者从后向前把小元素往前调)。

    具体思想为(把大元素往后调)：
        从第一个元素开始往后遍历，每到一个位置判断是否比后面的元素大，如果比后面元素大，那么就交换两者大小，然后继续向后，
            进行一轮之后就可以保证「最大的那个数被交换交换到最末的位置可以确定。
        第二次同样从开始起向后判断着前进，如果当前位置比后面一个位置更大的那么就和他后面的那个数交换。
            但是有点注意的是，这次并不需要判断到最后，只需要判断到倒数第二个位置就行
            (因为第一次我们已经确定最大的在倒数第一，这次的目的是确定倒数第二)
        同理，后面的遍历长度每次减一，直到第一个元素使得整个元素有序。

     2, 5, 3, 1, 4
        2,5,3,1,4
        2,3,5,1,4
        2,3,1,5,4
        2,3,1,4,5
     2, 3, 1, 4, 5
        2,3,1,4,5
        2,1,3,4,5
        2,1,3,4,5
        2,1,3,4,5
     2, 1, 3, 4, 5
        1,2,3,4,5
        1,2,3,4,5
        1,2,3,4,5
        1,2,3,4,5
     1, 2, 3, 4, 5
        1,2,3,4,5
        1,2,3,4,5
        1,2,3,4,5
        1,2,3,4,5
     1, 2, 3, 4, 5


     */
}
